<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

    <script>

        // 隐式转化：表达式在计算的过程中，数据自己完成的转化


        // 第一种：算术运算符的转化

        //    算术运算符中  -  *   /  %  +    数据会隐式转化为数字
        //    表达式中有加号且有字符串的时候    数据会隐式转化为字符串

        // 总结：
        //   遇到加号的时候，优先看有没有字符串，如果有字符串就转字符串，没有字符串就转数字



        // 第二种：比较运算符

        //    两边都是字符串，就比较ASCII值，一位一位的进行比较，主要比出结果就结束
        //    有一边不是字符串，就比较数字  







        // 小结：

        // 算术运算符中，遇到加号且遇到字符串，就转字符串，其他都转数字

        // 比较运算符中，两边都是字符串的时候，才比较ASCII值，其他都转数字

        // 特殊值
        //   null 和 0  不相等
        //   null 和 undefined 相等的，但是不全等
        //   NaN 六亲不认






        var a = 2 ;
        var b = '3' ;
        var c = a + b ;
        console.log(c) ;

        var d = a - b ;
        console.log(d) ;

        console.log(true + false) ;  // 1

        console.log(true + null) ;  // 1

        console.log(null + undefined) ;  // NaN



        // 编程每一步计算得出一个结果，没有连等式

        console.log(1 + 2 + '3') ;  // 33

        console.log('1' + 2 + 3) ;  // 123



        // 比较运算符

        console.log(3 > 2 > 1) ;  // false 
        

        // 数据会转为数字
        console.log(true > false) ;  // true

        // 数据会转为数字
        console.log(true == 2) ;  // false

        console.log(true == 1) ;  // true

        console.log(true === 1) ; // false












        // 特殊情况  --- js规定

        console.log(null == 0) ;  // false    null不会转数字

        console.log(null == undefined) ;  // true

        console.log(null === undefined) ;  // false


        // NaN不与任何值做比较,包括他自己    false    集合!!!!!!!!
        console.log(NaN == NaN) ;  // false



        // 特殊情况

        // 两个字符串比较的是ASCII值 , 并且一位一位的进行比较，比出结果就结束
        console.log('a' < 'b') ;  // true

        console.log('1' < 'a') ;  // 32 < 97

        console.log('hello' < 'this') ;  // true

        console.log('123' < '23') ;  // true



        // 只要两个不都是字符串   就转数字进行比较
        console.log(1 < 'a') ;  // false

        console.log(true < 'a') ;  // false   1 < NaN  -> false


        

    </script>
    
</body>
</html>